松鼠提醒系统架构总览

松鼠提醒系统架构总览

1. 架构愿景

松鼠提醒采用边缘优先、分层解耦的架构设计,支撑亿级用户的实时位置追踪和智能提醒服务。

核心设计原则: - 🌍 边缘优先:用户请求在最近的边缘节点处理 - ⚡ 无感体验:端到端延迟<100ms,用户无感知 - 🔄 水平扩展:各层独立扩展,支持10倍流量突发 - 💰 成本优化:按需付费,无闲置资源浪费


2. 系统架构总览图

flowchart TB subgraph 边缘层[☁️ Cloudflare 边缘层 - 250+节点] CF1[Workers - 状态上报处理] CF2[Workers KV - 用户配置缓存] CF3[Durable Objects - WebSocket推送] end subgraph 接入层[🌐 腾讯云K8s 接入层 - 香港节点] LB[Load Balancer] API1[m01-状态引擎 Pod] API2[m02-提醒服务 Pod] end subgraph 服务层[⚙️ 核心服务层 - K8s Cluster] SVC1[m03-轨迹处理服务] SVC2[m04-洞察引擎] SVC3[m05-商业智能] CACHE[(Redis Cluster)] end subgraph 数据层[💾 数据存储层] TIDB[(TiDB Cluster<br/>OLTP + TiFlash OLAP)] CH[(ClickHouse<br/>时序分析)] R2[Cloudflare R2<br/>轨迹归档] end subgraph 客户端[📱 客户端层] APP1[Flutter App - iOS] APP2[Flutter App - Android] WATCH[智能手表] end APP1 -->|状态上报| CF1 APP2 -->|状态上报| CF1 WATCH -->|状态同步| CF1 CF1 -->|预处理| LB CF3 -->|推送提醒| APP1 CF3 -->|推送提醒| APP2 LB --> API1 LB --> API2 API1 --> SVC1 API2 --> SVC2 SVC1 --> CACHE SVC2 --> CACHE SVC1 --> TIDB SVC2 --> TIDB SVC3 --> CH SVC1 -.->|归档| R2 TIDB -.->|同步| CH

3. 模块依赖关系图

flowchart LR subgraph M01[m01 状态感知引擎] M01A[速度检测] M01B[屏幕状态] M01C[手持检测] end subgraph M02[m02 提醒服务] M02A[L2提醒触发] M02B[通知推送] M02C[提醒去重] end subgraph M03[m03 轨迹处理] M03A[OD矩阵计算] M03B[停留点识别] M03C[轨迹压缩] end subgraph M04[m04 洞察引擎] M04A[人群热力图] M04B[OD分析] M04C[异常检测] end subgraph M05[m05 商业智能] M05A[LBS广告投放] M05B[B端报告生成] M05C[数据脱敏] end M01 -->|状态变更事件| M02 M01 -->|轨迹点| M03 M03 -->|聚合数据| M04 M04 -->|洞察报告| M05 M02 -.->|提醒记录| M03 M04 -.->|人群标签| M02

模块职责说明

模块 职责 依赖 被依赖
m01-状态引擎 检测设备状态(速度/屏幕/手持) - m02, m03
m02-提醒服务 L2级提醒触发和推送 m01, m04 -
m03-轨迹处理 OD矩阵、停留点、轨迹压缩 m01 m04
m04-洞察引擎 人群分析、OD洞察、异常检测 m03 m05
m05-商业智能 LBS广告、B端报告、数据变现 m04 -

4. 数据流向图

4.1 实时数据流(状态上报)

sequenceDiagram participant APP as Flutter App participant CF as Cloudflare Workers participant K8s as 腾讯云K8s participant REDIS as Redis participant TIDB as TiDB APP->>CF: 1. POST /api/v1/status<br/>{lat, lng, speed, screen, held} CF->>CF: 2. 校验 & 预处理 CF->>CF: 3. 查询Workers KV<br/>用户配置/地理围栏 CF->>K8s: 4. 转发处理请求 K8s->>K8s: 5. m01-状态机计算 K8s->>REDIS: 6. 更新实时状态 K8s->>TIDB: 7. 持久化存储 K8s-->>CF: 8. 响应 CF-->>APP: 9. 200 OK<br/>(<50ms)

4.2 提醒触发数据流

sequenceDiagram participant CF as Cloudflare Workers participant DO as Durable Objects participant K8s as 腾讯云K8s participant REDIS as Redis participant TIDB as TiDB loop 每5秒 CF->>K8s: 查询状态变更 end K8s->>K8s: m01-判断接近中转站 K8s->>REDIS: 查询是否已提醒 K8s->>TIDB: 查询用户配置 K8s->>K8s: m02-触发L2提醒 K8s->>DO: 建立WebSocket连接 DO->>CF: 推送提醒 CF->>APP: WebSocket推送 K8s->>REDIS: 记录提醒状态 K8s->>TIDB: 记录提醒日志

4.3 离线分析数据流(每日批量)

sequenceDiagram participant TIDB as TiDB participant CH as ClickHouse participant M04 as m04-洞察引擎 participant M05 as m05-商业智能 participant S3 as R2对象存储 Note over TIDB,S3: 每日凌晨 02:00 TIDB->>CH: 1. 同步轨迹数据<br/>(TiCDC同步) CH->>CH: 2. 生成OD矩阵 CH->>CH: 3. 计算人群热力图 CH->>M04: 4. 推送分析结果 M04->>M04: 5. 生成洞察报告 M04->>M05: 6. 人群标签 M05->>TIDB: 7. 更新广告标签 CH->>S3: 8. 归档原始轨迹 TIDB->>TIDB: 9. 清理过期数据

5. 部署拓扑图

flowchart TB subgraph 用户区域 CN[中国大陆用户] HK[香港用户] SG[新加坡用户] GLOBAL[其他全球用户] end subgraph Cloudflare边缘 CF_HK[香港节点<br/>119.28.0.0/14] CF_SG[新加坡节点] CF_GLOBAL[全球Anycast] end subgraph 腾讯云香港Region K8S_HK[K8s Cluster<br/>3 Master + 10 Worker] LB_HK[CLB负载均衡] end subgraph TiDB服务 TIDB_HK[TiDB - 香港Region] TIDB_SG[TiDB - 新加坡Region] end CN -->|优化路由| CF_HK HK --> CF_HK SG --> CF_SG GLOBAL --> CF_GLOBAL CF_HK --> LB_HK CF_SG --> TIDB_SG LB_HK --> K8S_HK K8S_HK --> TIDB_HK TIDB_HK <-->|双向同步| TIDB_SG

6. 技术栈总结

层级 技术选型 选型理由
客户端 Flutter + Dart 跨平台,单代码库支持iOS/Android
边缘层 Cloudflare Workers 250+节点,0ms冷启动,按请求计费
接入层 腾讯云K8s (TKE) 香港Region,低延迟,与TiDB同区
服务层 Go + Gin框架 高并发,内存占用低,编译快速
缓存层 Redis Cluster 实时状态存储,TTL过期
OLTP数据库 TiDB Cloud 分布式SQL,自动分片,HTAP
OLAP数据库 ClickHouse 列存,高效时序分析
对象存储 Cloudflare R2 S3兼容,无出网费
消息队列 Apache Pulsar (预留) 跨地域复制,持久化

7. 性能指标规划

指标 目标值 说明
状态上报延迟 P99 < 50ms 边缘节点处理
提醒触发延迟 P99 < 100ms 端到端
系统可用性 99.95% 全年停机<4小时
并发用户数 1000万 同时在线
日活用户 1亿 DAU
数据写入 50万 TPS 峰值状态上报
查询响应 P99 < 200ms 分析查询

8. 相关文档


🐿️ 松鼠提醒项目 | 架构师 @architect-lead | 系统架构总览已建立,各模块可开始详细设计